package cn.lzm.registry;

import cn.lzm.config.RegistryConfig;
import cn.lzm.model.ServiceMetaInfo;

import java.util.List;

/**
 * @author lzm
 * @Date 2024/8/6
 * @description 注册中心
 */
public interface Registry {

    /**
     * 初始化
     */
    void init(RegistryConfig registryConfig);

    /**
     * 注册服务
     */
    void register(ServiceMetaInfo metaInfo) throws Exception;

    /**
     * 注销服务（服务端）
     */
    void unregister(ServiceMetaInfo metaInfo) throws Exception;

    /**
     * 服务发现
     * @param service 服务键名
     * @return 该服务的元信息
     */
    List<ServiceMetaInfo> discoverService(String service);

    /**
     * 服务销毁
     */
    void destroy();

    /**
     * 心跳检测（服务端）
     */
    void heartBeat();

    /**
     * 监听（消费端）
     *
     * @param serviceNodeKey 节点的key
     */
    void watch(String serviceNodeKey);

}
